/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package 学习.下.接口;
/**
 * @description 接口的使用、定义
 *
 *          接口与类同等级 并列的结构
 *          定义接口的成员：1.JDK7之前 只能定义全局常量（public static final） 还有抽象方法(public abstract)
 *                       2.JDK8及以后 静态方法 （还有默认方法） 基本上可以当做类使用
 *
 *          没有构造器 也就不能实例化
 *          要让类实现接口 该类成为接口的实现类 重写了所有的抽象方法之后 就可以实例化类 没有全写的话类只能是抽象类
 *
 *          可以多实现 以逗号隔开 弥补了单继承性
 *          接口的继承 接口之间可以继承 可以多继承
 *          具体使用体现多态 实际上作为一种规范
 *          先继承 后实现 先extends 后implements
 * @author 俊昭
 * @date 2022/4/7
*/
public class InterfaceTest {
    public static void main(String[] args) {
        System.out.println(Fly_able.MAX_SPEED+"m/s");
        Plane plane=new Plane();
        plane.fly();
        Kate kate =new Kate();
        kate.stop();

        Test test =new Test();
        test.f(new Bullet());// 体现了多态 接口的实现类也是可以


    }
}
class Test{
    public void f(Ability ability){
        System.out.println(" ");
    }
//    protected
}
class Bullet implements Attack_able, Fly_able {
    @Override
    public void kill() {
        System.out.println("子弹有杀伤性");
    }

    @Override
    public void fly() {
        System.out.println("子弹飞行很快");
    }

    @Override
    public void stop() {
        System.out.println("子弹命中后会停下");

    }
}
class Kate implements Fly_able {
    @Override
    public void fly() {
        System.out.println("风筝需要有风才放");
    }

    @Override
    public void stop() {
        System.out.println("风筝收线降落");
    }
}
class Plane implements Fly_able {

    public void fly() {// Implements method in Fly_able
        System.out.println("飞机引擎起飞");
    }

    public void stop() {// Implements method in Fly_able
        System.out.println("飞机由驾驶员操作降落");
    }
}
interface Fly_able extends Ability{
    // 可以不写修饰符 但是也在
    int MAX_SPEED =7900;// 第一宇宙速度
    public static final int MIN_SPEED =1;

    public abstract void fly();
    void stop();

//    public Fly_able(){}接口 abstract 方法不能有主体
}
interface Attack_able extends Ability{
    void kill();
}
interface A extends Attack_able,Fly_able{// 多继承

}
interface Ability{

}